And use it.
GParamSpec *pspec);
static void gtk_invisible_constructed (GObject *object);
+static GdkDisplay *
+gtk_invisible_root_get_display (GtkRoot *root)
+{
+ GtkInvisible *invisible = GTK_INVISIBLE (root);
+
+ return invisible->priv->display;
+}
+
static void
gtk_invisible_root_interface_init (GtkRootInterface *iface)
{
+ iface->get_display = gtk_invisible_root_get_display;
}
G_DEFINE_TYPE_WITH_CODE (GtkInvisible, gtk_invisible, GTK_TYPE_WIDGET,
gtk_widget_realize (widget);
}
-/**
- * gtk_invisible_get_display:
- * @invisible: a #GtkInvisible.
- *
- * Returns the #GdkDisplay object associated with @invisible
- *
- * Returns: (transfer none): the associated #GdkDisplay.
- **/
-GdkDisplay *
-gtk_invisible_get_display (GtkInvisible *invisible)
-{
- g_return_val_if_fail (GTK_IS_INVISIBLE (invisible), NULL);
-
- return invisible->priv->display;
-}
-
static void
gtk_invisible_realize (GtkWidget *widget)
{
GDK_AVAILABLE_IN_ALL
void gtk_invisible_set_display (GtkInvisible *invisible,
GdkDisplay *display);
-GDK_AVAILABLE_IN_ALL
-GdkDisplay*gtk_invisible_get_display (GtkInvisible *invisible);
G_END_DECLS
#include "config.h"
-#include "gtkroot.h"
+#include "gtkrootprivate.h"
/**
* SECTION:root
G_DEFINE_INTERFACE (GtkRoot, gtk_root, GTK_TYPE_WIDGET)
+static GdkDisplay *
+gtk_root_default_get_display (GtkRoot *self)
+{
+ return gdk_display_get_default ();
+}
+
static void
gtk_root_default_init (GtkRootInterface *iface)
{
+ iface->get_display = gtk_root_default_get_display;
+}
+
+GdkDisplay *
+gtk_root_get_display (GtkRoot *self)
+{
+ GtkRootInterface *iface;
+
+ g_return_val_if_fail (GTK_IS_ROOT (self), NULL);
+
+ iface = GTK_ROOT_GET_IFACE (self);
+ return iface->get_display (self);
}
GTypeInterface g_iface;
/*< public >*/
+ GdkDisplay * (* get_display) (GtkRoot *self);
};
--- /dev/null
+#ifndef __GTK_ROOT_PRIVATE_H__
+#define __GTK_ROOT_PRIVATE_H__
+
+#include "gtkroot.h"
+
+G_BEGIN_DECLS
+
+GdkDisplay * gtk_root_get_display (GtkRoot *root);
+
+G_END_DECLS
+
+#endif /* __GTK_ROOT_PRIVATE_H__ */
#include "gtkcsstypesprivate.h"
#include "gtkeventcontroller.h"
#include "gtklistlistmodelprivate.h"
-#include "gtkroot.h"
+#include "gtkrootprivate.h"
#include "gtksizerequestcacheprivate.h"
#include "gtkwindowprivate.h"
#include "gtkinvisibleprivate.h"
static inline GdkDisplay *
_gtk_widget_get_display (GtkWidget *widget)
{
- GtkWidget *toplevel = _gtk_widget_get_toplevel (widget);
+ GtkRoot *root = _gtk_widget_get_root (widget);
- if (_gtk_widget_is_toplevel (toplevel))
- {
- if (GTK_IS_WINDOW (toplevel))
- return gtk_window_get_display (GTK_WINDOW (toplevel));
- else if (GTK_IS_INVISIBLE (toplevel))
- return gtk_invisible_get_display (GTK_INVISIBLE (widget));
- }
+ if (root == NULL)
+ return gdk_display_get_default ();
- return gdk_display_get_default ();
+ return gtk_root_get_display (root);
}
static inline GtkStyleContext *
}
}
+static GdkDisplay *
+gtk_window_root_get_display (GtkRoot *root)
+{
+ GtkWindow *window = GTK_WINDOW (root);
+ GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
+
+ return priv->display;
+}
+
static void
gtk_window_root_interface_init (GtkRootInterface *iface)
{
+ iface->get_display = gtk_window_root_get_display;
}
/**
}
#endif
-GdkDisplay *
-gtk_window_get_display (GtkWindow *window)
-{
- GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
-
- return priv->display;
-}
-
/**
* gtk_window_is_active:
* @window: a #GtkWindow
void gtk_window_set_hardcoded_surface (GtkWindow *window,
GdkSurface *surface);
-GdkDisplay *gtk_window_get_display (GtkWindow *window);
-
/* Exported handles */
typedef void (*GtkWindowHandleExported) (GtkWindow *window,